package view;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;

public class Tile extends Canvas {

	private int value;
	Tile(Composite parent,int style) {
		super(parent,style);
		value=0;
		Font f=getFont();
		Font nf=new Font(getDisplay(),f.getFontData()[0].getName(),16,SWT.BOLD);
		setFont(nf);
		addPaintListener(new PaintListener() {
			
			public void paintControl(PaintEvent e) {
				FontMetrics fm=e.gc.getFontMetrics();
				int width = fm.getAverageCharWidth();
				int mx=getSize().x/2 - (""+value).length() * width/2;
				int my=getSize().y/2 - fm.getHeight()/2-fm.getDescent();
				if (value>0)
					e.gc.drawString(""+value, mx, my);
				
			}
		});
	}
	
	public void setValue(int value){
		this.value=value;
		changeBackgroundColor();
		redraw();
	}
	
	private void changeBackgroundColor(){
		if (value==0)
			setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
		else if (value==2)
			setBackground(getDisplay().getSystemColor(SWT.COLOR_CYAN));
		else if (value==4)
			setBackground(getDisplay().getSystemColor(SWT.COLOR_GREEN));
		else if (value==8)
			setBackground(getDisplay().getSystemColor(SWT.COLOR_RED));
		else if (value==16)
			setBackground(getDisplay().getSystemColor(SWT.COLOR_YELLOW));
		else if (value==32)
			setBackground(getDisplay().getSystemColor(SWT.COLOR_MAGENTA));
		else if (value==64)
			setBackground(getDisplay().getSystemColor(SWT.COLOR_BLUE));
		else if (value==128)
			setBackground(getDisplay().getSystemColor(SWT.COLOR_DARK_GREEN));
		else if (value==256)
			setBackground(getDisplay().getSystemColor(SWT.COLOR_DARK_RED));
		else if (value==512)
			setBackground(getDisplay().getSystemColor(SWT.COLOR_DARK_YELLOW));
		else if (value==1024)
			setBackground(getDisplay().getSystemColor(SWT.COLOR_DARK_MAGENTA));
		else if (value==2048)
			setBackground(getDisplay().getSystemColor(SWT.COLOR_DARK_BLUE));
	}
}
